
#include "lcd.h"
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>

int fd = -1;            //屏幕的文件描述符
int * plcd = NULL;      //帧缓冲的首地址

int lcd_init()
{
    //1.打开屏幕文件
    fd = open( "/dev/fb0", O_RDWR );
    if( fd == -1 )
    {
        perror("open fb0 error ");
        return -1;
    }

    //2.ioctl() 
        //...

    //3.内存映射 
    plcd = mmap( NULL, 1024*600*4, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0 );
    if( plcd == MAP_FAILED )
    {
        perror("mmap error ");
        close( fd );
        return -1;
    }
}

void lcd_close()
{
    //1.解除映射
    munmap( plcd, 1024*600*4 );

    //2.关闭屏幕 
    close( fd );
}

//画点：在屏幕上任意的点(x,y)显示一个颜色color 
void display_point( int x, int y, int color )
{
    if( x>=0 && x<1024 && y>=0 && y<600 )
    {
        *( plcd + y*1024 + x ) = color;
    }
}

//显示一个纯色图像
void show_pure_color( int color )
{
    int i,j;
    for( j=0; j<600; j++ )
    {
        for( i=0; i<1024; i++ )
        {
            //画点 
            display_point( i, j, color );
        }
    }
}

//矩形
void display_Rectangle( int x0, int y0, int w, int h, int color )
{
    int i,j;
    for( j=0; j<600; j++ )
    {
        for( i=0; i<1024; i++ )
        {
            //矩形 
            if( i>x0 && i<x0+w && j>=y0 && j<y0+h )
            {
                //画点 
                display_point( i, j, color );
            }
        }
    }
}

//圆 
void display_Circle( int x0, int y0, int r, int color )
{
    int i,j;
    for( j=0; j<600; j++ )
    {
        for( i=0; i<1024; i++ )
        {
            //圆 
            if( (i-x0)*(i-x0) + (j-y0)*(j-y0) <= r*r )
            {
                //画点 
                display_point( i, j, color );
            }
        }
    }
}



